Custom Type Declaration এবং তাদের প্রয়োগ
Custom Types বা কাস্টম টাইপ ডিক্লেয়ারেশন Elm ভাষায় একটি শক্তিশালী বৈশিষ্ট্য, যা ডেভেলপারদের একটি নতুন ডেটা টাইপ তৈরি করতে সহায়তা করে। এই কাস্টম টাইপগুলো ব্যবহার করে আমরা বাস্তব বিশ্বের সমস্যা মডেলিং করতে পারি এবং আমাদের প্রোগ্রামকে আরও শক্তিশালী এবং পরিস্কারভাবে ডিজাইন করতে পারি।
Elm এ কাস্টম টাইপ তৈরি করার জন্য type কিওয়ার্ড ব্যবহার করা হয়। এর মধ্যে বিভিন্ন ধরনের কাস্টম টাইপ তৈরি করা যেতে পারে, যেমন Union Types (যে ধরনের টাইপ একাধিক ভিন্ন ভিন্ন মান গ্রহণ করতে পারে), Record Types (যেগুলোর নির্দিষ্ট ফিল্ড থাকে), এবং Aliases (যেগুলি অন্য কোনো টাইপের জন্য নাম দেয়)। এখানে Custom Type Declaration এর বিস্তারিত আলোচনা করা হলো।
১. Union Type Declaration
Union Types হল এমন টাইপ যা একাধিক ভিন্ন ভিন্ন মান গ্রহণ করতে পারে। এটি সাধারণত | অপারেটর দিয়ে আলাদা করা হয়।
উদাহরণ:
ধরা যাক, আপনি একটি ডেটা টাইপ তৈরি করতে চান যা TrafficLight এর মান রাখবে, যার মধ্যে তিনটি সম্ভাব্য মান থাকতে পারে: Red, Yellow, এবং **Green**।
type TrafficLight
= Red
| Yellow
| Greenএখানে, TrafficLight একটি Union Type যা তিনটি মান ধারণ করতে পারে: Red, Yellow, এবং Green। এর মাধ্যমে আপনি ট্রাফিক লাইটের অবস্থা মডেল করতে পারবেন।
প্রয়োগ:
describeTrafficLight : TrafficLight -> String
describeTrafficLight light =
case light of
Red -> "Stop"
Yellow -> "Caution"
Green -> "Go"এখানে, describeTrafficLight ফাংশনটি TrafficLight টাইপের একটি মান নেয় এবং তার উপর ভিত্তি করে একটি স্ট্রিং রিটার্ন করে। case এক্সপ্রেশন ব্যবহার করে আমরা TrafficLight টাইপের প্রতিটি মানের জন্য আলাদা আউটপুট প্রদান করেছি।
ফাংশন কল করা উদাহরণ:
result1 = describeTrafficLight Red -- ফলাফল হবে "Stop"
result2 = describeTrafficLight Green -- ফলাফল হবে "Go"২. Record Type Declaration
Record Types হল এমন কাস্টম টাইপ, যা বিভিন্ন ফিল্ডের মাধ্যমে একসাথে একাধিক মান ধারণ করতে পারে। Record টাইপ ডিক্লেয়ারেশনে {} চিহ্ন ব্যবহার করা হয় এবং প্রতিটি ফিল্ডের নাম এবং টাইপ দেওয়া হয়।
উদাহরণ:
type alias Person =
{ name : String
, age : Int
, isActive : Bool
}এখানে, Person একটি Record Type যা তিনটি ফিল্ড ধারণ করে: name, age, এবং isActive। প্রতিটি ফিল্ডের টাইপ যথাক্রমে String, Int, এবং Bool।
প্রয়োগ:
getPersonDetails : Person -> String
getPersonDetails person =
"Name: " ++ person.name ++ ", Age: " ++ String.fromInt(person.age)এখানে, getPersonDetails ফাংশনটি Person টাইপের একটি মান নেয় এবং তার নাম ও বয়স রিটার্ন করে।
ফাংশন কল করা উদাহরণ:
person1 = { name = "Alice", age = 30, isActive = True }
result = getPersonDetails person1 -- ফলাফল হবে "Name: Alice, Age: 30"৩. Alias Type Declaration
Type Aliases হল এমন ডেটা টাইপ যেগুলি অন্য কোনো টাইপের জন্য একটি নতুন নাম তৈরি করে। এটি ব্যবহার করে কোনো বিদ্যমান টাইপকে একটি নতুন নাম দেওয়া যায়, যা কোডকে আরও পরিষ্কার এবং পুনঃব্যবহারযোগ্য করে।
উদাহরণ:
type alias Address = Stringএখানে, Address হল একটি Type Alias যা আসলে String টাইপের জন্য একটি নতুন নাম তৈরি করেছে। এর মাধ্যমে আপনি যখন কোথাও Address টাইপ ব্যবহার করবেন, তখন এটি আসলে String টাইপ হবে।
প্রয়োগ:
sendMessage : Address -> String -> String
sendMessage address message =
"Sending message to " ++ address ++ ": " ++ messageএখানে, sendMessage ফাংশনটি একটি Address (যা আসলে String) এবং একটি বার্তা নেয় এবং একটি স্ট্রিং রিটার্ন করে।
ফাংশন কল করা উদাহরণ:
result = sendMessage "123 Elm Street" "Hello there!" -- ফলাফল হবে "Sending message to 123 Elm Street: Hello there!"৪. Custom Types with Parameters
Elm এ কাস্টম টাইপের সঙ্গে প্যারামিটার ব্যবহার করা যায়, অর্থাৎ টাইপের মধ্যে বিভিন্ন প্যারামিটার ব্যবহার করে আরও জেনেরিক ডেটা স্ট্রাকচার তৈরি করা যায়।
উদাহরণ:
type Result msg
= Success msg
| Failure Stringএখানে, Result একটি Parameterized Union Type যা Success এবং Failure কনস্ট্রাক্টরের মাধ্যমে ব্যবহার করা হয়। Success কনস্ট্রাক্টর একটি msg টাইপের মান গ্রহণ করে, এবং Failure কনস্ট্রাক্টর একটি String গ্রহণ করে।
প্রয়োগ:
handleResult : Result String -> String
handleResult result =
case result of
Success msg -> "Success: " ++ msg
Failure msg -> "Failure: " ++ msgএখানে, handleResult ফাংশনটি Result String টাইপের একটি মান নেয় এবং Success অথবা Failure এর উপর ভিত্তি করে আউটপুট প্রদান করে।
ফাংশন কল করা উদাহরণ:
result1 = handleResult (Success "Data Loaded Successfully") -- ফলাফল হবে "Success: Data Loaded Successfully"
result2 = handleResult (Failure "Network Error") -- ফলাফল হবে "Failure: Network Error"উপসংহার
Custom Types (Union Types, Record Types, Type Aliases) Elm এ কোডকে আরও পরিষ্কার, শক্তিশালী, এবং পুনঃব্যবহারযোগ্য করতে সহায়তা করে। Union Types একাধিক মান ধারণ করে, Record Types ডেটার ফিল্ডগুলিকে একসাথে সংরক্ষণ করে, এবং Type Aliases কোডের টাইপগুলোকে আরও বুঝতে সহজ করে তোলে। এগুলো ব্যবহার করে আমরা বাস্তব বিশ্বের সমস্যা সহজে মডেলিং করতে পারি এবং শক্তিশালী অ্যাপ্লিকেশন তৈরি করতে পারি।
Read more